package cn.sumpu.toolkit.weibo;


import net.sf.json.JSONObject;

import com.tencent.weibo.api.Friends_API;
import com.tencent.weibo.api.T_API;
import com.tencent.weibo.api.User_API;
import com.tencent.weibo.beans.OAuth;
import com.tencent.weibo.utils.OAuthClient;
import com.tencent.weibo.utils.WeiBoConst;

public class TencentWeibo {
	public static OAuth oauth = null;
	public static OAuthClient auth = null;
	private String appKey;
	private String appSecret;
	
	/**
	 * 
	 * @param appKey 腾讯微博审核通过的appkey
	 * @param appSecret 腾讯微博审核通过的appSecret
	 */
	public TencentWeibo(String appKey,String appSecret){
		this.appKey=appKey;
		this.appSecret=appSecret;
	}
	
	/**
	 * 发起授权请求腾讯微博
	 * @param callbackUrl 回调地址
	 * @return 请求的地址
	 */
	public  String requestOauth(String callbackUrl) {
		try {
			oauth = new OAuth(appKey, appSecret, callbackUrl);
			auth = new OAuthClient();
			oauth = auth.requestToken(oauth);
			if (oauth.getStatus() == 1) {
				return null;// 获取request token失败
			} else {
				String oauth_token = oauth.getOauth_token();// 获取request token
				return "http://open.t.qq.com/cgi-bin/authorize?oauth_token="
						+ oauth_token;
			}
		} catch (Exception e) {
			e.printStackTrace();
			return null;
		}

	}

	/**
	 * 发起授权请求
	 * @return 请求的地址
	 */
	public  String requestOauth() {
		try {
			oauth = new OAuth();
			auth = new OAuthClient();
			oauth.setOauth_consumer_key(appKey);
			oauth.setOauth_consumer_secret(appSecret);
			oauth = auth.requestToken(oauth);// 获取request token
			if (oauth.getStatus() == 1) {
				System.out.println("获取request token失败");
				return null;
			} else {
				String oauth_token = oauth.getOauth_token();
				return "http://open.t.qq.com/cgi-bin/authorize?oauth_token="+ oauth_token;
			}
		} catch (Exception e) {
			e.printStackTrace();
			return null;
		}
	}
	
	/**
	 * 获取用户授权信息
	 * 
	 * @param oauthVerifier
	 *            授权码
	 * @return OAuth 返回OAuth获得AccessToken
	 */
	public  AccessUser requstAccessToken(String oauthVerifier) {
		oauth.setOauth_verifier(oauthVerifier);
		try {
			oauth = auth.accessToken(oauth);
			User_API userAPI=new User_API();
			String useInfo=userAPI.info(oauth, "json");
			JSONObject jsonObj=JSONObject.fromObject(useInfo);
			JSONObject jsonData= (JSONObject) jsonObj.get("data");
			AccessUser accessUser=new AccessUser();
			accessUser.setUid(jsonData.getString("name"));
			accessUser.setName(jsonData.getString("nick"));
			accessUser.setHeadUrl(jsonData.getString("head")+"/50");
			accessUser.setAccessToken(oauth.getOauth_token());
			accessUser.setAccessSecret(oauth.getOauth_token_secret());
			accessUser.setDesc("tencentWeibo");
			return accessUser;
		} catch (Exception e) {
			e.printStackTrace();
			return null;
		}
	}

	/**
	 * 分享内容到腾讯微博
	 * 
	 * @param text 文本内容
	 * @param url 分享的链接
	 * @param picUrl 图片链接
	 * @param site 网站来源
	 * @param appkey 授权的认证
	 */
	public String share(String text,String url,String picUrl,String site,String appkey){
		
		return "http://share.v.t.qq.com/index.php?c=share&a=index&site="+site+"&title="+text+"&url="+url+"&pic="+picUrl+"&appkey="+appkey;
	}
	
	/**
	 * 分享内容到腾讯微博
	 * 
	 * @param text 文本内容
	 * @param url 分享的链接
	 * @param site 网站来源
	 * @param appkey 授权的认证
	 */
	public String shareUrl(String text,String url,String site,String appkey){
		
		return "http://share.v.t.qq.com/index.php?c=share&a=index&site="+site+"&title="+text+"&url="+url+"&appkey="+appkey;
	}
	
	/**
	 * 分享内容到腾讯微博
	 * 
	 * @param text 文本内容
	 * @param picUrl 图片链接
	 * @param site 网站来源
	 * @param appkey 授权的认证
	 */
	public String sharePic(String text,String picUrl,String site,String appkey){
		return "http://share.v.t.qq.com/index.php?c=share&a=index&site="+site+"&title="+text+"&pic="+picUrl+"&appkey="+appkey;
	}
	
	/**
	 * 分享内容到腾讯微博
	 * 
	 * @param text 文本内容
	 * @param site 网站来源
	 * @param appkey 授权的认证
	 */
	public String shareText(String text,String site,String appkey){
		
		return "http://share.v.t.qq.com/index.php?c=share&a=index&site="+site+"&title="+text+"&appkey="+appkey;
	}
	/**
	 * 发布一条微博信息(文本内容)
	 * 
	 * @param accessToken
	 *            授权认证信息
	 * @param accessSecret
	 *            授权认证信息
	 * @param text
	 *            发送的文本内容
	 * @param clientIP
	 *            用户ip（必须正确填写用户侧真实ip，不能为内网ip及以127或255开头的ip，以分析用户所在地）
	 */
	public  void sendMessage(String text, String accessToken,
			String accessSecret, String clientIP) {
		try {
			OAuth oauth = getWeiboOauth(accessToken, accessSecret);
			T_API t_API = new T_API();
			t_API.add(oauth, WeiBoConst.ResultType.ResultType_Json, text,
					clientIP);
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

	/**
	 * 上传图片并发布一条微博
	 * 
	 * @param accessToken
	 *            授权认证信息
	 * @param accessSecret
	 *            授权认证信息
	 * @param text
	 *            发送的文本内容
	 * @param picUrl
	 *            本地图片路径
	 * @param clientIP
	 *            用户ip（必须正确填写用户侧真实ip，不能为内网ip及以127或255开头的ip，以分析用户所在地）
	 */
	public  void sendMessageLocalPic(String text, String picUrl,
			String accessToken, String accessSecret, String clientIP) {
		try {
			OAuth oauth = getWeiboOauth(accessToken, accessSecret);
			T_API t_API = new T_API();
			t_API.add_pic(oauth, WeiBoConst.ResultType.ResultType_Json, text,
					clientIP, picUrl);
		} catch (Exception e) {
			e.printStackTrace();
		}

	}

	/**
	 * 微博关注
	 * 
	 * @param accessToken
	 *            授权认证信息
	 * @param accessSecret
	 *            授权认证信息
	 * @param weiboUserId
	 *            关注的微博帐号id
	 */
	public  void addFollow(String weiboUserId, String accessToken,
			String accessSecret, String clientIP) {
		try {
			OAuth oauth = getWeiboOauth(accessToken, accessSecret);
			Friends_API friendsAPI = new Friends_API();
			friendsAPI.add(oauth, "json", weiboUserId, clientIP);
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

	/**
	 * 取消微博关注
	 * 
	 * @param accessToken 授权认证信息
	 * @param accessSecret 授权认证信息
	 * @param weiboUserId 取消关注的微博帐号id
	 *  @param clientIP 用户ip（必须正确填写用户侧真实ip，不能为内网ip及以127或255开头的ip，以分析用户所在地）
	 */
	public  void delFollow(String weiboUserId, String accessToken,
			String accessSecret) {
		try {
			OAuth oauth = getWeiboOauth(accessToken, accessSecret);
			Friends_API friendsAPI = new Friends_API();
			friendsAPI.del(oauth, "json", weiboUserId);
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

	/**
	 * 获取用户资料（授权用户）
	 * 
	 * @param accessToken
	 * @param accessSecret
	 */
	public  AccessUser getUserInfo(String accessToken, String accessSecret) {
		try {
			OAuth oauth = getWeiboOauth(accessToken, accessSecret);
			User_API userAPI = new User_API();
			String userInfo = userAPI.info(oauth, "json");
			JSONObject jsonObj = JSONObject.fromObject(userInfo);
			JSONObject jsonData = (JSONObject) jsonObj.get("data");
			AccessUser accessUser=new AccessUser();
			accessUser.setUid(jsonData.getString("name"));
			accessUser.setName(jsonData.getString("nick"));
			accessUser.setHeadUrl(jsonData.getString("head")+"/50");
			accessUser.setAccessToken(accessToken);
			accessUser.setAccessSecret(accessSecret);
			return accessUser;
		} catch (Exception e) {
			e.printStackTrace();
			return null;
		}
	}

	// 设置授权
	private  OAuth getWeiboOauth(String accessToken, String accessSecret) {
		OAuth oauth = new OAuth();
		oauth.setOauth_consumer_key(appKey);
		oauth.setOauth_consumer_secret(appSecret);
		oauth.setOauth_token(accessToken);
		oauth.setOauth_token_secret(accessSecret);
		return oauth;
	}

}
